//
// Created by dell on 2023/12/14.
//

#ifndef WIN_DEMO_FILE_PARSE_H
#define WIN_DEMO_FILE_PARSE_H

#include <fstream>
#include <string>
#include <map>


// 文件读取和写入
namespace IOUtils {

    /**
     * 读取文件
     * @param path 文件位置
     * @return
     */
    std::map<std::string, std::string> readFile(const std::string& path) {
        std::ifstream file(path);
        std::map<std::string, std::string> db;
        if (!file) {
            // 无法打开
            perror("file not open");
        } else {
            // 读取文件进行解析 key=value 形式, 作为 db 存储
            std::string line;
            while (getline(file, line)) {
                // 获取符号第一次出现的位置
                int index = line.find("=");
                // 判断位置是否有效
                if (index != std::string::npos) {
                    // 获取密码
                    std::string username = line.substr(0, index);
                    std::string password = line.substr(index + 1);
                    db.insert(std::pair<std::string, std::string>(username, password));
                }

            }
            // 关闭文件流
            file.close();
        }
        return db;
    }


    /**
     * 追加写入文件
     * @param path 文件路径
     * @param data 数据
     * @return
     */
    int wriedFile(const std::string& path, const std::map<std::string, std::string>& data) {

        std::ofstream outfile(path, std::ios::app);
        if (!outfile) {
            // 无法打开
            printf("error: file not open");
            return 1;
        }

        if (!data.empty()) {
            for (const auto &item: data) {
                std::string username = item.first;
                std::string password = item.second;

                // 数据追加到文件中
                std::string outData = username.append("=").append(password).append("\n");
                outfile << outData;
            }
        }
        // 关闭文件流
        outfile.close();
        return 0;
    }

}

#endif //WIN_DEMO_FILE_PARSE_H
